<!DOCTYPE html>
<!--
     SPDX-License-Identifier: CC-BY-SA-4.0
     SPDX-FileCopyrightText: 2020 seL4 Project a Series of LF Projects, LLC.
-->
<!-- Page last generated 2025-02-20 03:16:15 +0000 -->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>camkes-3.9.0 | seL4 docs</title>

    <!-- Our stylesheet and theme stylesheet.  Contains bootstrap. -->
    <link rel="stylesheet" href="/assets/css/style.css" type="text/css">
    <!-- Font awesome -->
    <link href="https://use.fontawesome.com/releases/v5.0.8/css/all.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
    <!-- Pygments syntax highlighting  -->
    <link rel="stylesheet" href="/assets/css/highlighting/trac.css" type="text/css">
    <link rel="icon" type="image/x-icon" href="/assets/favicon.ico"><script defer data-domain="docs.sel4.systems"
	    src="https://analytics.sel4.systems/js/script.js"></script></head>

  <body class="container-fluid">

    



<header>
  <ul class="row menu">
    <li class="col-xs-12 col-md-2" >
            <a href="https://sel4.systems" class="skip-icon">
              <img class="img-responsive" src="/assets/logo-text-white.svg" alt="seL4 logo" />
            </a>
    </li>
    <li class="col-xs-12 col-md-10 menu">
      <nav aria-label="Banner links">
        <h2><a href="/Resources" />Resources</h2>
        <h2><a href="/processes" />Contributing</a></h2>
        <h2><a href="/projects" />Projects</h2>
        <h2><a href="/Tutorials" />Tutorials</h2>
        <iframe title="DuckDuckGo search bar" src="https://duckduckgo.com/search.html?site=docs.sel4.systems&prefill=Search%20sel4.systems" style="overflow:hidden;margin-bottom:10px; padding:0;height:40px;float:right;border-width: 0px"></iframe>
      </nav>
    </li>
  </ul>
  <div class="clear"></div>
  
<div class="breadcrumbs bootstrap hidden-sm-down">
  <nav class="sel-breadcrumb" aria-label="Breadcrumb" >
    <ol class=" list-unstyled" vocab="http://schema.org/" typeof="BreadcrumbList">
      
      
        

        

        <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <a property="item" typeof="WebPage" href="/">
              <span property="name"><b>seL4 Docs</b></span>
            </a>
            <meta property="position" content="1" />
        </li>
      
        

        

        <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <a property="item" typeof="WebPage" href="/releases/camkes">
              <span property="name"><b>CAmkES Releases</b></span>
            </a>
            <meta property="position" content="2" />
        </li>
      
        

        
          <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <span property="name">camkes-3.9.0</span>
            <meta property="position" content="3" /></li>
          
    </ol>
  </nav>
  <nav class="sel-version" aria-label="Current Versions">
    <ol class="list-unstyled">
      <li class="list-unstyled text-right" style="margin-left:auto; padding:0rem 0rem;">
        Current versions:</li>
      <li class="list-unstyled text-right">
      <a href="/releases/sel4/13.0.0"><b>seL4-13.0.0</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/microkit/1.4.1"><b>microkit-1.4.1</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/camkes/camkes-3.11.0"><b>camkes-3.11.0</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/capdl/0.3.0"><b>capDL-0.3.0</b></a></li>
      </ol>
  </nav>
  <div class='clear'></div>
</div>


</header>

    <main>
      <div class="row">
  <div class="hidden-xs col-sm-4 col-md-3 col-lg-2">
    


<div class="sidebar">
















</div>

  </div>
  <div class="content col-sm-8 col-md-6 col-lg-7 main">
    <h1 id="camkes-version-camkes-390-release">CAmkES Version camkes-3.9.0 Release</h1>

<p>Announcing the release of <code class="language-plaintext highlighter-rouge">camkes-3.9.0</code> with the following changes:</p>

<p>camkes-3.9.0 2020-10-26
Using seL4 version 12.0.0</p>

<h2 id="changes">Changes</h2>

<p>Below is a lightly edited list of all PRs merged into master for this release.</p>

<ul>
  <li>Enforce system-V stack ordering for libc.
    <ul>
      <li>This allows <code class="language-plaintext highlighter-rouge">musllibc</code> to initialise and infer the location of <code class="language-plaintext highlighter-rouge">auxv</code> from <code class="language-plaintext highlighter-rouge">envp</code> consistently.</li>
    </ul>
  </li>
  <li>Add <code class="language-plaintext highlighter-rouge">uint64_t</code> and <code class="language-plaintext highlighter-rouge">int64_t</code> types to language.
    <ul>
      <li>This introduced two new data types into the CAmkES language to support larger types.</li>
    </ul>
  </li>
  <li>Remove <code class="language-plaintext highlighter-rouge">elf.h</code>, now defined in sel4runtime.</li>
  <li>Camkes,rumprun: fix tls management implementation:
    <ul>
      <li><code class="language-plaintext highlighter-rouge">.tdata*</code> and <code class="language-plaintext highlighter-rouge">.tbss*</code> linker symbol declarations are suppressed until the final link step.</li>
    </ul>
  </li>
  <li>Fix <code class="language-plaintext highlighter-rouge">generate_seL4_SignalRecv</code> in <code class="language-plaintext highlighter-rouge">Context.py</code> and update <code class="language-plaintext highlighter-rouge">rpc-connector.c</code> template accordingly.
    <ul>
      <li><code class="language-plaintext highlighter-rouge">seL4SignalRecv</code> only exists on MCS, split the two calls for compatibility.</li>
    </ul>
  </li>
  <li>Save preprocessed camkes files to allow for easier debugging.</li>
  <li>CMake: Skip fetching gpio list for pc99 platforms.
    <ul>
      <li>Most PC99 platforms do not have GPIO pins.</li>
    </ul>
  </li>
  <li>Support for running odroidc2 in camkes-arm-vm. Get the IRQ trigger type through the interrupt node in the dts.</li>
  <li>Add gpio query engine.
    <ul>
      <li>The engine takes in a YAML file containing a list of GPIO pins and sorts out the ‘gpio’ queries so that the connector templates for the <code class="language-plaintext highlighter-rouge">seL4GPIOServer</code> can generate the appropriate structures and functions.</li>
    </ul>
  </li>
  <li>Add option <code class="language-plaintext highlighter-rouge">CAmkESNoFPUByDefault</code>.
    <ul>
      <li>By enabling CAmkESNoFPUByDefault camkes will compile all user-level libraries (except musllibc) with compilation flags to not use the FPU. A component that wishes to use the FPU must override the flags itself.</li>
    </ul>
  </li>
  <li>Update <code class="language-plaintext highlighter-rouge">seL4InitHardware</code> template for api change.
    <ul>
      <li>The configuration name for the list of devices to bind is now a component attribute instead of an interface attribute.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">libsel4camkes</code> Support registering DMA memory that is both cached and uncached.</li>
  <li>Add sel4bench dependency into <code class="language-plaintext highlighter-rouge">camkes/templates</code> to allow for cycle counting.</li>
  <li><code class="language-plaintext highlighter-rouge">component.common.c</code>: use correct label for dma pool.
    <ul>
      <li>When calling <code class="language-plaintext highlighter-rouge">register_shared_variable</code> from a component context the label needs to be provided.</li>
    </ul>
  </li>
  <li>Add <code class="language-plaintext highlighter-rouge">seL4DTBHW</code> connector. This connector variant is similar to <code class="language-plaintext highlighter-rouge">seL4DTBHardware</code>, but takes a hardware component on the from end.</li>
  <li><code class="language-plaintext highlighter-rouge">seL4DTBHardware</code> bug fix, use global interface name. This prevents the allocator from throwing an error when the same interface name is used in a different component.</li>
  <li>Camkes connector extensions + DMA improvements:
    <ul>
      <li>libsel4camkes: Implement DMA cache for Arm</li>
      <li>component.common.c: Support additional DMA setting. Allow setting the cache and base paddr value of the DMA pool.</li>
      <li>Add single_threaded attribute which when set adds the <code class="language-plaintext highlighter-rouge">seL4SingleThreadedComponent</code> templates.</li>
      <li>Allow connectors to declare CMake libraries for each end of the connection. This allows a connector to have most of its implementation in a library and only use the template for initialisation and configuration.</li>
      <li>camkes-gen.cmake: Create component target stub. This is equivalent to creating a Component with no customization but would still contain things based on its Camkes definition, such as connector artifacts.</li>
    </ul>
  </li>
  <li>Component.common.c: Move init() to C constructor
    <ul>
      <li>Connectors that don’t use threads use runtime constructors for their initialisation.</li>
    </ul>
  </li>
  <li>Libsel4camkes: camkes_call_hardware_init_modules
Provide this public function for starting hardware modules that have been registered.</li>
  <li>Add <code class="language-plaintext highlighter-rouge">global_rpc_endpoint_badges</code> macro.
    <ul>
      <li>This macro assigns badges for different connectors that share the global-rpc-endpoint object for a component instance.</li>
    </ul>
  </li>
  <li>Libsel4camkes: irq backend for global-connectors. This adds a way for calling registered IRQ notification handlers for connectors that don’t have their own threads.</li>
  <li>Add seL4DMASharedData connector and add appropriate library functionality in <code class="language-plaintext highlighter-rouge">libsel4camkes</code>.
    <ul>
      <li>This connector sets up a dataport connector that is added to the DMA pool that the camkes runtime tracks for each component.</li>
    </ul>
  </li>
  <li>Add support for connector header files and component header templates.
    <ul>
      <li>A connector can now define template header files that will be included by <code class="language-plaintext highlighter-rouge">camkes.h</code>. Similarly, component header templates will be instantiated and then automatically included by <code class="language-plaintext highlighter-rouge">camkes.h</code>.</li>
    </ul>
  </li>
  <li>Support creating TCB pools and assigning domains to them in camkes templates.
    <ul>
      <li>Assign domain IDs for TCBs in the thread pool based on values provided by the config option array values.</li>
    </ul>
  </li>
  <li>Generalise jinja linter to support non-camkes use cases. The Jinja linter can now be used on any arbitrary Jinja template.</li>
  <li>Add support in <code class="language-plaintext highlighter-rouge">libsel4camkes</code> for matching interrupts even if they are defined
with different base types.</li>
  <li>Add interface registration to <code class="language-plaintext highlighter-rouge">libsel4camkes</code> via <code class="language-plaintext highlighter-rouge">interface_registration.h</code> as part of the driver framework.</li>
  <li>Revive graph.dot output file for each asssembly. This can be loaded with a
program like <code class="language-plaintext highlighter-rouge">xdot</code> to view a diagram of the camkes system.</li>
  <li>Virtqueues:
    <ul>
      <li>Add virtqueue recieve.</li>
      <li>Set virtqueue size on creation to the number of rings and descriptor tables have.</li>
      <li>Add <code class="language-plaintext highlighter-rouge">virtqueue_get_client_id</code> macro for automatically assigning client IDs to distinguish different virtqueue channels within a single component instance.</li>
      <li>Link channel ID to name, this allows components to bind to channels via naming them rather than knowing their IDs.</li>
    </ul>
  </li>
  <li>Add Arm irq type support to <code class="language-plaintext highlighter-rouge">seL4HardwareInterrupt</code> template. This allows IRQs on Arm to have the trigger mode and target core configured.</li>
  <li>Allow <code class="language-plaintext highlighter-rouge">size</code> to be number as well as a string in <code class="language-plaintext highlighter-rouge">marshal.c</code> template.</li>
  <li>Add <code class="language-plaintext highlighter-rouge">global_endpoint_badges</code> macro used by the global-endpoints mechanism to assign badge
values based on a full system composition.</li>
  <li>Make <code class="language-plaintext highlighter-rouge">public allocate_badges</code> method which is used to standardize badge allocation across many connectors.</li>
  <li>Add support for a component definition to specify a template C source file. This file will be passed through the template tool before passed to the C compiler.
    <ul>
      <li>This is how components can allocate objects required from a loader without having to define special connector types.</li>
    </ul>
  </li>
  <li>Add <code class="language-plaintext highlighter-rouge">msgqueue</code> mechanism which allows componets to sent messages. This is essentially another layer ontop of the virtqueue functionality.</li>
  <li>Accept Red Hat ARM cross-compilers in <code class="language-plaintext highlighter-rouge">check_deps.py</code>.</li>
  <li>Simplify the logic for combining the connections in the stage9 parser. This improves processing times.</li>
  <li>Camkes-tool:
    <ul>
      <li>Add priority to muslc so that its initialsation comes after camkes. This relates to recent changes in sel4runtime.</li>
      <li>Add an interface <code class="language-plaintext highlighter-rouge">dataport_caps</code> for accessing dataport caps that is used by the seL4SharedDataWithCaps template.</li>
    </ul>
  </li>
  <li>Tools: define <code class="language-plaintext highlighter-rouge">camkes_tool_processing</code> when running the C preprocessor.</li>
  <li>Remove <code class="language-plaintext highlighter-rouge">template</code> keyword from camkes language.
    <ul>
      <li>This is driven by wanting to make it easier to extend camkes generation build rules with more inputs than a single template file and make it possible better manage non-template code that needs to run when generating templates.</li>
    </ul>
  </li>
</ul>

<h2 id="upgrade-notes">Upgrade Notes</h2>

<h1 id="full-changelog">Full changelog</h1>
<p>Use <code class="language-plaintext highlighter-rouge">git log camkes-3.8.0..camkes-3.9.0</code> in
<a href="https://github.com/seL4/camkes-tool">https://github.com/seL4/camkes-tool</a></p>

<h1 id="more-details">More details</h1>
<p>See the
<a href="https://github.com/seL4/camkes-tool/blob/camkes-3.9.0/docs/index.md">documentation</a>
or ask on the mailing list!</p>


  </div>







  
  
<div class="sidebar-toc hidden-xs hidden-sm col-md-3 col-lg-3">
  
    <ul class="section-nav">
    	<h2> CAmkES </h2> 
        <li>
          
          <a style="" class="" href="/projects/camkes/">
            Documentation homepage
          </a>
        </li>


        <li>
          
          <a style="" class="" href="/projects/camkes/status.html">
            Status
          </a>
        </li>












    
        <h3>Useful URLs</h3>
    
        <li>
          <a style="" class="" href="/projects/camkes/manual.html">
            CAmkES Manual
          </a>
        </li>

    
        <li>
          <a style="" class="" href="https://trustworthy.systems/projects/TS/camkes.pml">
            Trustworthy Systems CAmkES project
          </a>
        </li>





    
        <h3>Repositories</h3>
    
        <li>
          <a class="" href="https://github.com/sel4/camkes-tool">
            camkes-tool
          </a>
        </li>

    
        <li>
          <a class="" href="https://github.com/sel4/camkes">
            camkes
          </a>
        </li>

    
        <li>
          <a class="" href="https://github.com/sel4/camkes-manifest">
            camkes-manifest
          </a>
        </li>

    
        <li>
          <a class="" href="https://github.com/sel4proj/global-components">
            global-components
          </a>
        </li>









  
      
          <h3>Releases</h3>
      
          <li>
            <a style=" font-weight: bold; " href="/releases/camkes/camkes-3.9.0.html">
              camkes-3.9.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.8.0.html">
              camkes-3.8.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.7.0.html">
              camkes-3.7.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.6.0.html">
              camkes-3.6.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.5.0.html">
              camkes-3.5.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.4.0.html">
              camkes-3.4.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.3.0.html">
              camkes-3.3.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.2.0.html">
              camkes-3.2.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.11.0.html">
              camkes-3.11.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.10.0.html">
              camkes-3.10.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.1.0.html">
              camkes-3.1.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-3.0.0.html">
              camkes-3.0.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-2.3.1.html">
              camkes-2.3.1
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-2.3.0.html">
              camkes-2.3.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-2.2.0.html">
              camkes-2.2.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-2.1.0.html">
              camkes-2.1.0
            </a>
          </li>
  
      
          <li>
            <a style="" href="/releases/camkes/camkes-2.0.0.html">
              camkes-2.0.0
            </a>
          </li>
  







    </ul>

</div>


</div>

    </main>
    


<footer class="site-footer">

  <h2 class="footer-heading">seL4 docs</h2>

  <div class="footer-col-wrapper">

    <div class="col-md-2">
      



<ul class="social-media-list">
  <li><a href="https://github.com/sel4"><i class="fab fa-github"></i> <span class="username">sel4</span></a></li><li><a href="https://github.com/sel4proj"><i class="fab fa-github"></i> <span class="username">sel4proj</span></a></li>
</ul>

    </div>

    <div class="col-md-8">
      <ul class="list-unstyled">
        <li>
          This site is for displaying seL4 related documentation.  Pull requests are welcome.
        </li>
        
          <li>
            Site last updated: Fri Feb 7 10:17:38 2025 +1100 ee78c8857c
          </li>
          <li>
          </li>
        
      </ul>
    </div>
    <div class="col-md-2">
<a href="https://github.com/seL4/docs/blob/master/content_collections/_releases/camkes/camkes-3.9.0.md">View page on GitHub</a>
      <br />
      <a href="https://github.com/seL4/docs/edit/master/content_collections/_releases/camkes/camkes-3.9.0.md">Edit page on GitHub</a>
      <br />
      <a href="/sitemap">Sitemap</a>
    </div>

  </div>

</footer>

  </body>
</html>
